/*
 * ldap.java
 *
 * Created on Torek, 2003, avgust 26, 11:07
 */

package Seguridad;

import javax.naming.*;
import java.util.Hashtable;
import javax.naming.directory.*;

import javax.servlet.*;
import javax.servlet.http.*;
import java.io.*;
import java.util.*;

import oracle.jdbc.driver.*;
import oracle.jdbc.pool.*;
import java.sql.*;  
import javax.sql.*; 


/**
 *
 * @author  yeinergg
 */
public class Seguridad {
    
    public static boolean autenticarLDAP(String  pUser, String pPassword){
        
        // Set up environment for creating initial context
        Hashtable env = new Hashtable(11);
        env.put(Context.INITIAL_CONTEXT_FACTORY, "com.sun.jndi.ldap.LdapCtxFactory");
        env.put(Context.PROVIDER_URL, "ldap://172.16.1.17:389/");
        
        env.put(Context.SECURITY_AUTHENTICATION, "simple");
        
        String usuario = null;   // aqui colocar el usuario.
        String password = null;  // aqui va el password
        String valor = null;
        env.put(Context.SECURITY_PRINCIPAL, ""+pUser+"@puj.edu.co");  // se requiere concatenar el dominio
        env.put(Context.SECURITY_CREDENTIALS, pPassword);
        
        try {
            // Createinitial context.  Ya con esto verificas si se pudo o no conectar al LDAP.
            // Si no puede, dispara una excepcion..  que es atrapada en el catch.
            DirContext ctx = new InitialDirContext(env);
            
            // Attributes answer = ctx.getAttributes("cn="+pUser+",ou=Administrativos,dc=puj,dc=edu,dc=co");   //obj error
            
        }
        catch(NamingException NEx) {
            NEx.printStackTrace();
            return false;
        }
        return true;
    }
    
    public static portal autenticarUsuario(Connection conn, String pNextEntrada) throws Exception {
        String entradaUser=null;
        portal por = null;
        
        
        if(conn!=null) {
            String comando="select usuario, password, per_consecutivo"+
            " from pr_permisos where consecutivo="+pNextEntrada+
            " and activo='Si' " +
            " and rownum=1";
            
              System.out.println(comando);
            Statement st=conn.createStatement();
            ResultSet rs=st.executeQuery(comando);
            if(rs.next()) {
                por = new portal();
                por.setUsuario(rs.getString(1));
                por.setPassword(rs.getString(2));
                por.setPerConsecutivo(rs.getString(3));
                
                //entradaUser=rs.getString(1);
                //entradaSipgeNumber=rs.getString("SIPGEID");
                if(por!=null ) {
                    // EL usuario es valido y llego del portal
                    
                    // AHORA hay que borrar la entrada del usuario de la tabla entradas_sipge
                    rs.close();
                    System.out.println(" Seguridad_Portal : inicia actualizacion");
                    comando="update pr_permisos set activo='No' where consecutivo="+pNextEntrada;
                    
                    st.executeUpdate(comando);
                    st.close();
                    System.out.println(" Seguridad_Portal : termina actualizacion");
                    //conn.close();
                    return por;
                    
                }
                else{
                    rs.close();
                    st.close();
                    //conn.close();
                    throw new Exception("Acceso Denegado Revise login y/o password");
                }
                
            }
            else {
                rs.close();
                st.close();
                throw new Exception("INVALID CREDENTIALS");
            }
        }
        else {
            throw new Exception("No se pudo ingresar al sistema paso 2 No se pudo establece ConnexiOn");
        }
        
    }//end method
    
    
    public static portal autenticarUsuarioAcad(Connection conn, String pNextEntrada) throws Exception
    {
        String entradaUser=null;
        portal por = null;
        System.out.println("conn" +conn);
        if(conn!=null)
        {
               String comando="select usuario, password, emplid"+
                              " from permisos where consecutivo= '"+pNextEntrada+"' " +
                              " and activo='Si' " +
                              " and rownum=1";
               
               System.out.println(comando);
               Statement st=conn.createStatement();
               ResultSet rs=st.executeQuery(comando);
               if(rs.next())
               {
                    por = new portal();
                    por.setUsuario(rs.getString(1));
                    por.setPassword(rs.getString(2));
                    por.setPerConsecutivo(rs.getString(3));
                    
                    //entradaUser=rs.getString(1);
                    //entradaSipgeNumber=rs.getString("SIPGEID");
                    if(por!=null )
                    {
                            // EL usuario es valido y llego del portal
                            
                            // AHORA hay que borrar la entrada del usuario de la tabla entradas_sipge
                           rs.close();
   System.out.println(" Seguridad_Portal : inicia actualizacion");                            
                           comando="update permisos set activo='No' where consecutivo= '"+pNextEntrada+"'";
                           System.out.println("update "+comando);
                           st.executeUpdate(comando);
                           st.close();
    System.out.println(" Seguridad_Portal : termina actualizacion");                                                   
                           //conn.close();
                           return por;

                    }
                    else{
                        rs.close();
                        st.close();
                        //conn.close(); 
                        throw new Exception ("Acceso Denegado Revise login y/o password");    
                    }
                    
               }
               else
               {
                   rs.close();
                   st.close();
                 throw new Exception ("INVALID CREDENTIALS");
               }
        }
        else
        {
            throw new Exception("No se pudo ingresar al sistema paso 2 No se pudo establece ConnexiOn");
        }

    }//end method
    
    
}  
